﻿/**
* 托盘图标控件 作者:feiyangqingyun(QQ:517216493) 2017-01-08
* 1. 可设置托盘图标对应所属主窗体。
* 2. 可设置托盘图标。
* 3. 可设置提示信息。
* 4. 自带右键菜单。
*/
#ifndef TRAYICON_H
#define TRAYICON_H

#include "../generalui_global.h"
#include "../GlobalUIDef.h"

#include <QObject>
#include <QSystemTrayIcon>
#include <QMenu>
#include <QMutex>

namespace GeneralUI {

	class GENERALUI_EXPORT SoftwareTrayIcon : public QObject
	{
		Q_OBJECT
	public:
		explicit SoftwareTrayIcon(QObject *parent = 0);
		~SoftwareTrayIcon();

	public:
		/**
		 * @brief	setMainWidget 设置所属主窗体
		 * @param	mainWidget
		 * @return 
		 */
		void setMainWidget(QWidget *mainWidget);

		/**
		 * @brief	setIcon 设置图标
		 * @param	strIcon
		 * @return 
		 */
		void setIcon(const QString &strIcon);

		/**
		 * @brief	setToolTip 设置提示信息
		 * @param	tip
		 * @return 
		 */
		void setToolTip(const QString &tip);

		/**
		 * @brief	setVisible 设置托盘图标是否可见
		 * @param	visible
		 * @return 
		 */
		void setVisible(bool visible);

		/**
		 * @brief	getVisible 获取和设置是否可见
		 * @return 
		 */
		bool getVisible() const;

		/**
		* @brief	showMessage 显示消息
		* @param	title
		* @param	msg
		* @param	icon
		* @param	msecs
		* @return
		*/
		void showMessage(const QString &title, const QString &msg, QSystemTrayIcon::MessageIcon icon = QSystemTrayIcon::Information, int msecs = 5000);

		/**
		* @brief	setExitDirect 设置是否直接退出,如果不是直接退出则发送信号给主界面
		* @param	exitDirect
		* @return
		*/
		void setExitDirect(bool exitDirect);

	Q_SIGNALS:
		/**
		 * @brief	slotTrayIconExit 
		 * @return 
		 */
		void slotTrayIconExit();

	private Q_SLOTS:
		/**
		 * @brief	slotShowMainWidget 显示主要窗口
		 * @return 
		 */
		void slotShowMainWidget();

		/**
		 * @brief	slotCloseMainWidget 关闭窗口
		 * @return 
		 */
		void slotCloseMainWidget();

		/**
		 * @brief	slotIconIsActived
		 * @param	reason
		 * @return 
		 */
		void slotIconIsActived(QSystemTrayIcon::ActivationReason reason);

	private:
		QSystemTrayIcon * m_pSystemTrayIcon;						// 托盘对象
		QWidget * m_pMainWidget;									// 对应所属主窗体
		QMenu * m_pMenu;											// 右键菜单
		bool m_bExitDirect;											// 是否直接退出
	};

}//namespace OfUI

#endif // TRAYICON_H
